package com.fractalist.base.core.utils;

import java.text.DecimalFormat;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class NumberTools {
	private static DecimalFormat decima=null;
	private static Map<String,String> patterns=null;
	static{
		decima=new DecimalFormat();
		patterns=new HashMap<String,String>();
		//一位整数
		patterns.put("1", "0");
		//取一位整数和两位小数
		patterns.put("2", "0.00");
		//取两位整数和三位小数，整数不足部分以0填补。
		patterns.put("3", "00.000");
		//取所有整数部分
		patterns.put("4", "#");
		//以百分比方式计数，并取两位小数
		patterns.put("5", "#.##%");
		//显示为科学计数法，并取五位小数
		patterns.put("6", "#.#####E0");
		//显示为两位整数的科学计数法，并取四位小数
		patterns.put("7", "00.####E0");
		//每三位以逗号进行分隔
		patterns.put("8", ",###");
		//每三位以逗号进行分隔，并显示小数部分
		patterns.put("9", ",###.##");
		//将格式嵌入文本
		patterns.put("10", ",xxx大小为每秒,###米。#");
	}
	
	/**
	 * 格式化数字<br/>
	 * @param formatPattern			格式化样式字符串
	 * @param numberSrc
	 * @return
	 */
	public static String formatFloatOrDoub(String formatPattern,Number numberSrc){
		decima.applyPattern(formatPattern);
		return decima.format(numberSrc);
	}
	
	/**
	 * 格式化数字<br/>
	 * 1、indexPattern=1,一位整数<br/>
	 * 2、取一位整数和两位小数<br/>
	 * 3、取两位整数和三位小数，整数不足部分以0填补。<br/>
	 * 4、取所有整数部分<br/>
	 * 5、以百分比方式计数，并取两位小数<br/>
	 * 6、显示为科学计数法，并取五位小数<br/>
	 * 7、显示为两位整数的科学计数法，并取四位小数<br/>
	 * 8、每三位以逗号进行分隔<br/>
	 * 9、每三位以逗号进行分隔，并显示小数部分<br/>
	 * @param indexPattern
	 * @param numberSrc
	 * @return
	 */
	public static String formatFloatOrDoubx(String indexPattern,Number numberSrc){
		decima.applyPattern(patterns.get(indexPattern));
		return decima.format(numberSrc);
	} 
	
	/**
	 * 判断是否为数字
	 * @param str
	 * @return
	 */
	public static boolean isNum(String str){
		return str.matches("^[-+]?(([0-9]+)([.]([0-9]+))?|([.]([0-9]+))?)$");
	}
	
//	public static void main(String[] args) {
//		System.out.println(NumberTools.formatFloatOrDoubx("9", 999999.8888));
//	}
}
